home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 5702 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.0 KB

  1. Path: mail2news.demon.co.uk!genesis.demon.co.uk
  2. From: Lawrence Kirby <fred@genesis.demon.co.uk>
  3. Newsgroups: comp.lang.c
  4. Subject: Re: I can't print the date in the format I want.
  5. Date: Tue, 20 Feb 96 19:24:58 GMT
  6. Organization: none
  7. Message-ID: <824844298snz@genesis.demon.co.uk>
  8. References: <4g5nbf$8s0@newsbf02.news.aol.com>
  9. Reply-To: fred@genesis.demon.co.uk
  10. X-NNTP-Posting-Host: genesis.demon.co.uk
  11. X-Newsreader: Demon Internet Simple News v1.27
  12. X-Mail2News-Path: genesis.demon.co.uk
  13.  
  14. In article <4g5nbf$8s0@newsbf02.news.aol.com>
  15.            asciizero@aol.com "ASCII zero" writes:
  16.  
  17. >Hi!  It is I once again.
  18. >
  19. >I am trying to use strftime() to format the date into YY-MM-DD. The format
  20. >seems to be working but I am unable to actually print the formatted
  21. >string. It compiles just fine using gcc. What have I overlooked?
  22. >
  23. >#include <stdio.h>
  24. >#include <time.h>
  25. >
  26. >main()
  27. >{
  28. >
  29. > struct tm *ptr;
  30. > time_t lt;
  31. > char *str;
  32. > int debug;  /* inserted for debugging purposes */
  33. >
  34. > lt = time(NULL);
  35. > ptr = localtime(<);
  36. > printf("\n The system clock shows: %s\n\n", asctime(ptr));
  37. > debug = strftime(str, 50, "The current date is %y-%m-%d", ptr);
  38.  
  39. str is an unitialised pointer to char which here you are passing as an
  40. argument to strftime(). This immediately results in undefined behaviour -
  41. you can never sensibly access the value of an uninitalised variable.
  42. strftime() requires as its first argument a pointer to a buffer (an array
  43. of char) where it can store the resulting string. You need something like:
  44.  
  45.  char buf[50];
  46.  
  47. ...
  48.  
  49.   debug = strftime(buf, sizeof buf, "The current date is %y-%m-%d", ptr);
  50.  
  51. > printf("-> %i", debug);          /* can we get the length of the
  52. >formatted string? */
  53.  
  54. In printf %d and %i do the same thing. However %d is generally preferred
  55. for historical reasons (it s the one that pre-ANSI compilers supported) and
  56. for the closer correspondance to the scanf() %d rather than %i specifier.
  57.  
  58. -- 
  59. -----------------------------------------
  60. Lawrence Kirby | fred@genesis.demon.co.uk
  61. Wilts, England | 70734.126@compuserve.com
  62. -----------------------------------------
  63.